package com.time.company.utils.string;

import android.support.annotation.NonNull;
import android.text.TextUtils;

import java.util.Locale;
import java.util.UUID;

public class StringUtil {

    public static String getPercentString(float percent) {
        return String.format(Locale.US, "%d%%", (int) (percent * 100));
    }

    /**
     * 删除字符串中的空白符
     *
     * @param content
     * @return String
     */
    public static String removeBlanks(String content) {
        if (content == null) {
            return null;
        }
        StringBuilder buff = new StringBuilder();
        buff.append(content);
        for (int i = buff.length() - 1; i >= 0; i--) {
            if (' ' == buff.charAt(i) || ('\n' == buff.charAt(i)) || ('\t' == buff.charAt(i))
                    || ('\r' == buff.charAt(i))) {
                buff.deleteCharAt(i);
            }
        }
        return buff.toString();
    }

    /**
     * 获取32位uuid
     *
     * @return
     */
    public static String get32UUID() {
        return UUID.randomUUID().toString().replaceAll("-", "");
    }

    public static boolean isEmpty(String input) {
        return TextUtils.isEmpty(input);
    }

    /**
     * 生成唯一号
     *
     * @return
     */
    public static String get36UUID() {
        UUID uuid = UUID.randomUUID();
        String uniqueId = uuid.toString();
        return uniqueId;
    }

    public static String makeMd5(String source) {
        return MD5Utils.getStringMD5(source);
    }

    public static final String filterUCS4(String str) {
        if (TextUtils.isEmpty(str)) {
            return str;
        }

        if (str.codePointCount(0, str.length()) == str.length()) {
            return str;
        }

        StringBuilder sb = new StringBuilder();

        int index = 0;
        while (index < str.length()) {
            int codePoint = str.codePointAt(index);
            index += Character.charCount(codePoint);
            if (Character.isSupplementaryCodePoint(codePoint)) {
                continue;
            }

            sb.appendCodePoint(codePoint);
        }

        return sb.toString();
    }

    /**
     * counter ASCII character as one, otherwise two
     *
     * @param str
     * @return count
     */
    public static int counterChars(String str) {
        // return
        if (TextUtils.isEmpty(str)) {
            return 0;
        }
        int count = 0;
        for (int i = 0; i < str.length(); i++) {
            int tmp = (int) str.charAt(i);
            if (tmp > 0 && tmp < 127) {
                count += 1;
            } else {
                count += 2;
            }
        }
        return count;
    }

    /**
     * 对字符串检查并且每三位之间添加一个逗号，
     * 如果有小数点，就去掉小数点及后面的数字
     *
     * @param str
     * @return
     */
    public static String addDotToString(String str) {
        // return
        if (TextUtils.isEmpty(str)) {
            return "";
        }
        String newStr = "";
        String dotStr = "";
        if (str.contains(".")) {
            String[] price = str.split("\\.");
            str = price[0];
            dotStr = new StringBuilder().append(".").append(price[1]).toString();
        }

        newStr = addDot(str);
        if (TextUtils.equals(dotStr, ".00")) {
            return newStr;
        }
        return new StringBuilder().append(newStr).append(dotStr).toString();
    }

    /**
     * 对字符串检查并且每三位之间添加一个逗号，
     * 如果有小数点，就去掉小数点及后面的数字
     *
     * @param str
     * @return
     */
    public static String addDotAndBehind(String str) {
        // return
        if (TextUtils.isEmpty(str)) {
            return "";
        }
        String newStr = "";
        String dotStr = "";
        if (str.contains(".")) {
            String[] price = str.split("\\.");
            str = price[0];
            dotStr = new StringBuilder().append(".").append(price[1]).toString();
        }

        newStr = addDot(str);
//		if (TextUtils.equals(dotStr, ".00")){
//			return newStr;
//		}
        return new StringBuilder().append(newStr).append(dotStr).toString();
    }

    @NonNull
    private static String addDot(String str) {
        String newStr;
        int length = str.length();
        if (length > 9) {
            newStr = new StringBuffer().append(str.substring(0, length - 9))
                    .append(",")
                    .append(str.substring(length - 9, length - 6))
                    .append(",")
                    .append(str.substring(length - 6, length - 3))
                    .append(",")
                    .append(str.substring(length - 3, length)).toString();
        } else if (length > 6) {
            newStr = new StringBuffer().append(str.substring(0, length - 6))
                    .append(",")
                    .append(str.substring(length - 6, length - 3))
                    .append(",")
                    .append(str.substring(length - 3, length)).toString();
        } else if (length > 3) {
            newStr = new StringBuffer().append(str.substring(0, length - 3))
                    .append(",")
                    .append(str.substring(length - 3, length)).toString();
        } else {
            newStr = str;
        }
        return newStr;
    }
}
